package cfg

import (
	"encoding/json"
	"fmt"
	"log"
	"os"
	"path"
	"time"
)

type _main struct {
	ProjectName string `json:"project_name"`
	Port        uint   `json:"port"`
}

type _mysql struct {
	DefaultDB   string `json:"default_db"`   //默认的数据库名称
	DataDB      string `json:"data_db"`      //业务的数据库名称
	LogModel    string `json:"log_model"`    //日志打印等级
	CloseAffair bool   `json:"close_affair"` //是否关闭事务
}

type _redis struct {
	DefaultDB uint `json:"default_db"` //默认数据库编号
	TokenDB   uint `json:"token_db"`   //token数据库编号
	DataDB    uint `json:"data_db"`    //业务数据库编号
	TempDB    uint `json:"temp_db"`    //临时存储数据库编号
}

type _config struct {
	Main  _main  `json:"main"`
	MySQL _mysql `json:"my_sql"`
	Redis _redis `json:"redis"`
}

var Config _config

func readConfig() {
	file, err1 := os.ReadFile(path.Join(ConfigDir, "config.json"))
	err2 := json.Unmarshal(file, &Config)
	if len(file) <= 5 || err1 != nil || err2 != nil {
		Config = _config{
			Main: _main{
				Port: 9527,
			},
			MySQL: _mysql{
				DefaultDB:   "admin_default",
				DataDB:      "admin_data",
				LogModel:    "Error",
				CloseAffair: false,
			},
			Redis: _redis{
				DefaultDB: 1,
				TokenDB:   2,
				DataDB:    3,
				TempDB:    4,
			},
		}
		saveConfigByJson("config.json")
		log.Println("请先修改配置文件：", path.Join(ConfigDir, "config.json"))
		time.Sleep(time.Second * 5)
		panic(fmt.Sprint("请先修改配置文件：", path.Join(ConfigDir, "config.json")))
	}
}

func saveConfigByJson(filename string) {
	marshal, _ := json.MarshalIndent(&Config, "", "  ")
	err := os.WriteFile(path.Join(ConfigDir, filename), marshal, DefaultFileModel)
	if err != nil {
		log.Println("创建配置文件失败：", path.Join(ConfigDir, filename), err)
	}
}
